import { sysConfig, themeConfig } from "./theme/assets/themeConfig.mjs";
import { existsSync } from "fs";
import path from "path";

/**
 * 获取系统配置
 */
export const getSysConfig = async () => {
  return sysConfig
}

/**
 * 获取并合并配置文件
 */
export const getThemeConfig = async () => {
  try {
    // themeConfig 配置文件绝对路径
    const configPath = path.resolve(__dirname, "../themeConfig.mjs")
    if (existsSync(configPath)) {
      // 文件存在时进行动态导入
      const userConfig = await import("../themeConfig.mjs")
      const config = Object.assign(themeConfig, userConfig?.themeConfig || {})
      return convertUrl(config)
    } else {
      // 文件不存在时返回默认配置
      console.warn("User configuration file not found, using default themeConfig.")
      return convertUrl(themeConfig)
    }
  } catch (error) {
    console.error("An error occurred while loading the configuration:", error)
    return convertUrl(themeConfig)
  }
}

const convertConfig = [
  'siteMeta', 'nav', 'navMore'
]

function convertUrl(config) {
  const convert = (key, value) => {
    if (!value || ['boolean', 'number'].includes(typeof value)) {
      // 不需要转换  continue
    } else if (typeof value === 'object') {
      // 对象 -> 递归
      for (const childKey in value) {
        value[childKey] = convert(childKey, value[childKey])
      }
    } else {
      // 需要转换
      try {
        if (value.indexOf('https://') > -1 || value.indexOf('http://') > -1) {
          // 不需要转换  continue
        } else if (value.startsWith('/')) {
          value = sysConfig.path.slice(0, sysConfig.path.length - 1) + value
        }
      } catch (e) {
        console.error(`==>属性转换错误 ${key}:`, value)
      }
    }
    return value
  }
  for (const key in config) {
    if (config.hasOwnProperty(key) && convertConfig.includes(key)) {
      // console.log(`解析属性 ${key} 的值`)
      convert(key, config[key])
    } else {
      // 不包含属性
    }
  }
  return config
}
